package com.sann;

import com.sann.config.SpringConfig;
import com.sann.spring.ArithmeticCalculator;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @ComponentScan("com.sann")
 * @EnableAspectJAutoProxy
 * public class SpringConfig {}
 * 配置类上注解表明开启AOP自动代理，同时扫描com.sann包，将LogAspect、ArithmeticCalculator作为组件注入IOC容器，因为它们都被@Component标注
 * ，同时LogAspect上标注了@Aspect，表明该类不是一个普通Bean，是一个切面，会继续对该类内部方法上标注的注解做进一步解析。
 *
 */
public class Client {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

        String[] names = context.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

        System.out.println("====Spring5.x以下版本最终通知在返回通知之前执行,这是有问题的，替代方案就是用环绕通知我们自己控制======");

        ArithmeticCalculator calculator = context.getBean(ArithmeticCalculator.class);
        calculator.div(1, 1);

    }
}
